package com.zx._10_设计模式.结构型模式.代理模式;

public class 静态代理 {

    public static void main(String[] args) {
        InterfaceA interfacea = new ProxyImplement();
        interfacea.exec();
    }

    /**
     * 静态代理的接口
     */
    public interface InterfaceA {

        void exec();
    }

    /**
     * 静态代理的实现类
     */
    private static class RealImplement implements InterfaceA {

        @Override
        public void exec() {
            System.out.println("real impl");
        }
    }

    /**
     * 运行静态代理的实现类
     */
    private static class ProxyImplement implements InterfaceA {

        private InterfaceA interfaceA;

        public ProxyImplement() {
            // 这个地方已经写死了 interfaceA 引用的是RealImplement的实现类。所以说这个是静态代理
            // 动态代理也是在类似这个地方改写的
            this.interfaceA = new RealImplement();
        }


        @Override
        public void exec() {
            System.out.println("dosomethings before");
            //实际调用
            interfaceA.exec();
            System.out.println("dosomethings after");
        }
    }
}
